strongswan 安装配置

配置epel源

1
2
3
4
5
6
7
8
9
10
11
12
13

cat > /etc/yum.repos.d/epel.repo << EOF

[epel]
name=Extra Packages for Enterprise Linux 7 - \$basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/\$basearch
baseurl=http://dl.fedoraproject.org/pub/epel/7Server/x86_64/
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7Server

EOF

安装Strongswan

yum -y install strongswan openssl openssl-devel

环境变量

1
2
3
4
5
6
7
8
9
10
11
12
cat >> /etc/sysctl.conf << EOF

## 开启转发
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
## 禁止重定向,比如禁止ICMP重定向报文
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

EOF

sysctl -p

防火墙配置

firewall-cmd --permanent --add-service=ipsec
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload


cat /usr/lib/firewalld/services/ipsec.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>IPsec</short>
<description>Internet Protocol Security (IPsec) incorporates security for network transmissions directly into the Internet Protocol (IP). IPsec provides methods for both encrypting data and authentication for the host or network it sends to. If you plan to use a vpnc server or FreeS/WAN, do not disable this option.</description>
<port protocol="ah" port=""/>
<port protocol="esp" port=""/>
<port protocol="udp" port="500"/>
<port protocol="udp" port="4500"/>
</service>



## 或者

  #启用ip伪装

# firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.100.100.0/24" masquerade'

#添加 nat 转发

# firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.100.100.0/24" forward-port port="4500" protocol="udp" to-port="4500"'

# firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.100.100.0/24" forward-port port="500" protocol="udp" to-port="500"'

配置文件ipsec.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160

cat >/etc/strongswan/ipsec.conf <<EOF

config setup

## 如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;
## no 保持旧连接,并发送通知;
## never 同 no, 但不发送通知.
uniqueids=yes

## 开启调试,记录日志
# charondebug="cfg 2, dmn 2, ike 2, net 0"

conn %default
ikelifetime=120m
keylife=30m
rekeymargin=3m
keyingtries=1
keyexchange=ike

compress = yes #是否启用压缩, yes 表示如果支持压缩会启用.

dpdaction = hold #当意外断开后尝试的操作, hold, 保持并重连直到超时.

dpddelay = 30s #意外断开后尝试重连时长

dpdtimeout = 60s #意外断开后超时时长, 只对 IKEv1 起作用

inactivity = 300s #闲置时长,超过后断开连接.

left = %any #服务端公网ip, 可以是魔术字 %any,表示从本地ip地址表中取.

right = %any #客户端ip, 同上

#指定服务端与客户端的dns, 多个用","分隔
leftdns = 8.8.8.8,8.8.4.4
rightdns = 8.8.8.8,8.8.4.4

#leftikeport = <port> #服务端用于ike认证时使用的端口, 默认为500,如果使用了nat 转发, 则使用4500

#leftsourceip = %config #服务器端虚拟ip地址

rightsourceip = 10.100.100.0/24 #客户端虚拟ip段

#服务器端子网, 魔术字 0.0.0.0/0. 如果为客户端分配虚拟 IP 地址的话,那表示之后要做 iptables 转发,那么服务器端就必须是用魔术字
leftsubnet = 0.0.0.0/0
#rightsubnet = <ip subnet>[[<proto/port>]][,...]

conn ikev1-ipsec
keyexchange=ikev1
fragmentation=yes #开启对 iOS 拆包的重组支持

left=%defaultroute
leftsubnet=0.0.0.0/0
leftfirewall=yes

right=%any
rightsourceip=10.100.100.0/24

#authby=xauthpsk
#xauth=server

leftauth=psk
rightauth=psk
rightauth2=xauth

auto=add

conn ikev2-eap-tls-wall
keyexchange=ikev2
fragmentation=yes #开启IKE 消息分片,开启对 iOS 拆包的重组支持
ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha256,aes256-sha1,3des-sha1!

#leftca="C=CA, O=WORKER, CN=WORKER CA" #服务器端根证书DN名称,可以不需设置
leftca=caCert.pem #服务器端根证书,功能同上,可以不需设置
leftsigkey=serverPubKey.pem #指定服务器证书的公钥,可以不需设置
leftcert=serverCert.pem #服务器证书, 可以是 PEM 或 DER 格式
leftauth=pubkey #服务端认证方法,使用证书

leftid=@wall.suroot.com #IKEID (group name) used for vpn client,服务端id, 可以任意指定, 默认为服务器证书的 subject, 还可以是魔术字 %any,表示什么都行.
left=%defaultroute #local IP used to connect to vpn client, 就是连接vpn客户端的网卡IP. 服务端公网ip, 可以是魔术字 %any,表示从本地ip地址表中取.
leftsubnet=0.0.0.0/0 #服务器端子网, 魔术字 0.0.0.0/0. 如果为客户端分配虚拟 IP 地址的话,那表示之后要做 iptables 转发,那么服务器端就必须是用魔术字
leftfirewall=yes
leftsendcert=always #是否发送服务器证书到客户端

right=%any
rightid=@wallclient #客户端id, 任意
rightsourceip=10.100.100.0/24 #客户端虚拟ip段
#rightsubnet = <ip subnet>[[<proto/port>]][,...]


rightauth=eap-tls
rightsendcert=never #客户端不发送证书
rightsigkey=clientPubKey.pem #指定客户端公钥,可以不需设置
rightcert=clientCert.pem #指定客户端证书路径
#eap_identity=%any #对windows有用,设置windows rightid
auto=add #当服务启动时, 应该如何处理这个连接项. add 添加到连接表中.

## 用于windows认证
conn ikev2-eap-mschapv2-win
keyexchange=ikev2
ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha256,aes256-sha1,3des-sha1!
rekey=no #不自动重置密钥,服务器对 Windows 发出 rekey 请求会断开连接
fragmentation=yes

#leftca="C=CA, O=WORKER, CN=WORKER CA"
leftca=caCert.pem
leftcert=serverCert.pem
leftsigkey=serverPubKey.pem
leftauth=pubkey

leftid=@wall.suroot.com
left=%defaultroute
leftsubnet=0.0.0.0/0
leftfirewall=yes
leftsendcert=always

right=%any
rightid = %any
eap_identity=%any
rightsourceip=10.100.100.0/24
#rightsubnet = <ip subnet>[[<proto/port>]][,...]


rightauth=eap-mschapv2 #客户端认证使用 EAP 扩展认证 , 貌似 eap-mschapv2 比较通用
rightsendcert=never #客户端不发送证书
#rightsigkey = <raw public key> | <path to public key>
#rightcert = <path> #不指定客户端证书路径

auto=add

## 站点到站点模式
conn tunnel

left=%defaultroute
leftsubnet=0.0.0.0/0
leftfirewall=yes

right=139.219.239.51
rightsubnet=192.168.222.0/26

keyexchange=ikev2
ike=aes256-sha2_256-modp1024!
esp=aes256-sha2_256!
authby=secret
keyingtries=0

ikelifetime=1h
lifetime=8h
dpddelay=30
dpdtimeout=120
dpdaction=clear

auto=add

type=tunnel

EOF

密码配置文件

1
2
3
4
5
6
7
8
9
10
11
12

cat >/etc/strongswan/ipsec.secrets <<EOF
## RSA PSK 需要分别对应客户端认证密码
: RSA serverKey.pem
: RSA clientKey.pem
: PSK "test1234"
user1 %any : EAP "test1234"
user2 %any : EAP "test1234"
user1 %any : XAUTH "test1234"
user2 %any : XAUTH "test1234"

EOF

配置文件strongswan.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

cat >/etc/strongswan/strongswan.conf <<EOF
charon {
load_modular = yes
duplicheck.enable = no #冗余检查关闭,以允许同时连接多个设备
compress = yes #传输启用压缩
plugins {
include strongswan.d/charon/*.conf
}

dns1 = 8.8.8.8 #给远程端指定DNS服务器
dns2 = 8.8.4.4
nbns1 = 8.8.8.8 #指定Windows的WINS服务器
nbns2 = 8.8.4.4

filelog { #配置strongSwan日志级别和路径
/var/log/strongswan.log {
time_format = %b %e %T
default = 5 # 日志最高等级5
append = no
flush_line = yes
}
}
}

include strongswan.d/*.conf

EOF

生成服务器和客户端证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#! /bin/bash

serverCN="wall.suroot.com"
serverIP="104.194.86.148"
clientCN="wallclient"

dn="C=CA, O=WORKER, CN="
ca_dn="${dn}WORKER CA"
server_dn="${dn}${serverCN}"
client_dn="${dn}${clientCN}"

days=3650

ipsec_d="/etc/strongswan/ipsec.d"
caKeyfile="${ipsec_d}/private/caKey.pem"
caCertfile="${ipsec_d}/cacerts/caCert.pem"

serverKeyfile="${ipsec_d}/private/serverKey.pem"
serverPubKeyfile="${ipsec_d}/certs/serverPubKey.pem"
serverCertfile="${ipsec_d}/certs/serverCert.pem"

clientKeyfile="${ipsec_d}/private/clientKey.pem"
clientPubKeyfile="${ipsec_d}/certs/clientPubKey.pem"
clientCertfile="${ipsec_d}/certs/clientCert.pem"


#生成CA证书:
#生成一个私钥
strongswan pki --gen --type rsa --size 4096 --outform pem > ${caKeyfile}
#使用私钥生成自签名根证书
strongswan pki --self --ca --lifetime ${days} --in ${caKeyfile} --type rsa --dn "${ca_dn}" --outform pem > ${caCertfile}

## 显示CA证书内容
strongswan pki --print --in ${caCertfile}




#生成服务端证书:

#生成一个私钥
strongswan pki --gen --type rsa --size 2048 --outform pem > ${serverKeyfile}

#用私钥生成公钥
strongswan pki --pub --in ${serverKeyfile} --type rsa --outform pem > ${serverPubKeyfile}

#用根证书给公钥签名生成服务器证书
strongswan pki --issue --lifetime ${days} --cacert ${caCertfile} --cakey ${caKeyfile} --in ${serverPubKeyfile} --dn "${server_dn}" --san="${serverCN}" --san="${serverIP}" --flag serverAuth --flag ikeIntermediate --outform pem > ${serverCertfile}

## 显示服务器证书内容
strongswan pki --print --in ${serverCertfile}




#生成客户端证书:

#生成一个私钥
strongswan pki --gen --type rsa --size 2048 --outform pem > ${clientKeyfile}

#用私钥生成公钥
strongswan pki --pub --in ${clientKeyfile} --type rsa --outform pem > ${clientPubKeyfile}

#用根证书给公钥签名生成服务器证书
strongswan pki --issue --lifetime ${days} --cacert ${caCertfile} --cakey ${caKeyfile} --in ${clientPubKeyfile} --dn "${client_dn}" --san ${clientCN} --flag clientAuth --outform pem > ${clientCertfile}

strongswan pki --print --in ${clientCertfile}

#为iPhone生成一个p12格式的客户端证书
openssl pkcs12 -export -inkey ${clientKeyfile} -in ${clientCertfile} -name "${clientCN}" -certfile ${caCertfile} -caname "${serverCN}" -out ${clientCertfile}.p12


## 变更证书权限
chmod -R 0600 "${ipsec_d}/private/"

重启strongswan

systemctl restart strongswan

systemctl enabble strongswan

显示当前接入动态信息

swanctl --log

iptables 配置方法

firewalld 要比 iptables 占太多内存. 小内存的 vps 用 firewalld 有点奢侈. 还是换回 iptables 了.

将下面几条规则加入 iptables 规则中, 适当使用 -I 参数替换 -A 参数, 确保所有的项目位置都在拒绝项前面.


#开放端口
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT

#启用ip伪装
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE

#添加转发
iptables -A FORWARD -s 10.1.0.0/16 -j ACCEPT

#保存规则
service iptables save

#重启服务
systemctl restart iptables


如果嫌上面的操作麻烦, 可以直接编辑 iptables 规则文件.

# vi /etc/sysconfig/iptables

将下面的规则部分贴进去, 不要整个复制粘贴,  根据原有规则适当调整每条规则的位置, 确保规则在拒绝项前, 使之能生效.

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -s 10.1.0.0/16 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

保存退出, 重启 iptables 使之生效.

# systemctl restart iptables

配置说明

证书使用配置说名

. IKEv2有两个很总要的信息需要确认,一个是数字证书,证书必须正确配置ca、crt和key三个文件。其中服务器证书serverCert.crt中subject DN或subjectAltName字段必须包含服务器的IP或域名。

. left|rightid应该在用户认证过程中进行鉴别,同时left|rightcert的值应该是left|rightcert数字证书中的subject DN或subjectAltName中的值。left|rightid可以是IP地址、域名、邮箱地址甚至是证书中可以辨识的名称。

生成证书说明

生成证书

# mkdir /cert && cd /cert

下面所有的(--type rsa --size 2048|4096 )可以省略, me.touzhi.work 可以换成IP 地址

1) 生成 CA 根证书

A. 生成一个私钥,用于CA证书自签:

yum安装的strongswan,命令已经变成"strongswan --help"了,而手动编译的还是"ipsec --help",不要弄混,否则就是命令不存在了。

# strongswan pki --gen --type rsa --size 4096 --outform pem > ca_key.pem

B. 基于这个私钥自己签一个 CA 根证书:

# strongswan pki --self --ca --flag serverAuth --lifetime 3650 --in ca_key.pem --type rsa --dn "C=CN, O=WTO, CN=me.touzi.work"  --outform pem >ca_cert.pem

–self 表示自签证书
–in 是输入的私钥
–dn 是判别名

    C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名
    O 组织名称
    CN 友好显示的通用名

–ca 表示生成 CA 根证书
–lifetime 为有效期, 单位是天

C. 显示CA 根证书内容

# strongswan pki --print --in ca_cert.pem

2) 生成服务器端证书

A. 生成一个私钥,用于服务端证书自签

# strongswan pki --gen --type rsa --size 2048 --outform pem > server_key.pem  

B. 从私钥生成公钥

# strongswan pki --pub --in server_key.pem --type rsa --outform pem > server_pub.pem

C. 用刚生成的公钥生成服务器证书

# strongswan pki --issue --lifetime 1200 --in server_pub.pem \
--cacert ca_cert.pem --cakey ca_key.pem --dn "C=CN, O=WTO, CN=me.touzi.work" \
--san="me.touzi.work" --san "162.219.120.136" --flag serverAuth --flag ikeIntermediate --outform pem > server_cert.pem


–issue, –cacert 和 –cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。

–dn, –san,–flag 是一些客户端方面的特殊要求:

. iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;

. Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),–flag serverAuth;

. 非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU),–flag ikdeIntermediate;

. Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,–san。

所以这里C、O的值要跟第一步的一致,CN值及--san值是服务器公网地址或url,另外这里可以设置多个--san值。否则会出现错误 13801:IKE身份验证凭证不可接受.

D. 显示服务器证书内容

# strongswan pki --print --in server_cert.pem

3) 生成客户端证书(可选), 如果需要很高的安全性, 可以用客户端证书

A 生成客户端证书的私钥

# strongswan pki --gen --type rsa --size 2048 --outform pem > client_key.pem

6) 用CA证书签发客户端证书

A. 从私钥生成公钥

# strongswan pki --pub --in client_key.pem --type rsa --outform pem > client_pub.pem

B. 签发客户端证书,这里就不需要上面那一堆特殊参数了

# strongswan pki --issue --in client_pub.pem \
--cacert ca_cert.pem --cakey ca_key.pem --dn "C=CN, O=WTO, CN=dolphin@126.com" \
--san dolphin@126.com --lifetime 1200 --outform pem > client_cert.pem

--flag serverAuth --flag ikeIntermediate
--san dolphin@126.com 可以省略,--san CN= 可以是邮箱地址,也可以是me.touzhi.work

C. 打包证书为 pkcs12,生成 pkcs12 证书

# openssl pkcs12 -export -inkey client_key.pem -in client_cert.pem -name "WTO Client" \
-certfile ca_cert.pem -caname "me.touzi.work"  -out client_cert.p12

CA证书转换,以防部分客户端不支持

# openssl x509 -inform PEM -outform DER -in ca_cert.pem -out ca.crt

8) 安装证书, 把证书复制到strongswan目录下

# cp -r ca_key.pem /etc/strongswan/ipsec.d/private/
# cp -r ca_cert.pem /etc/strongswan/ipsec.d/cacerts/
# cp -r server_cert.pem /etc/strongswan/ipsec.d/certs/
# cp -r server_key.pem /etc/strongswan/ipsec.d/private/
# cp -r server_pub.pem /etc/strongswan/ipsec.d/certs/
# cp -r client_cert.pem /etc/strongswan/ipsec.d/certs/
# cp -r client_key.pem /etc/strongswan/ipsec.d/private/

把 CA 证书(ca_cert.pem)、客户端证书(client_cert.pem)和 .p12 证书(client_cert.p12)用 FTP 复制出来给客户端用

配置验证方式的用户名与密码

下面添加用户

# vi /etc/strongswan/ipsec.secrets

#使用证书验证时的服务器端私钥
#格式 : RSA <private key file> [ <passphrase> | %prompt ]
: RSA server_key.pem

#使用预设加密密钥, 越长越好
#格式 [ <id selectors> ] : PSK <secret>
%any : PSK "预设加密密钥"


#EAP 方式, 格式同 psk 相同
用户名 : EAP "密码"

#XAUTH 方式, 只适用于 IKEv1
#格式 [ <servername> ] <username> : XAUTH "<password>"
用户名 : XAUTH "密码"

示例:

创建了VPN用户john和他的密码。在添加用户的时候,请注意在冒号(:)左右两边都需要一个空格。

: RSA server_key.pem  
: PSK "PSK_KEY"  
john %any : EAP "John's Password"  
john %any : XAUTH "John's Password" 

: RSA server_key.pem    #使用证书验证时的服务器端私钥
: PSK "123456"           #使用预设密钥时, 8-63位ASCII字符
: XAUTH "123456"         #这里是使用XAUTH验证时的用户名和密码
VPN %any : EAP "123456" #这里是使用EAP验证时的用户名和密码

客户端配置

在客户端安装(client_cert.p12,ca_cert.pem)两个证书如果你是使用iPhone, 可以通过邮件将这个两个证书发送到iPhone上然后安装。

先下载安装一开始生成的CA证书ca_cert.pem,可能需要改扩展名,如ca.crt

IOS 9.x:

    类型 IKEv2
    服务器是 IP 或是 URL
    远程ID是 IP 或是 URL
    账户和密码填 ipsec.secrets 里 EAP 前后的那两个

IOS 9 以下:

    类型 IPSec

iPhone, Android, Windows PC都可以通过证书加密码的方式登录VPN;

Mac OS X可以通过PSK key加密码的方式登录。

1) IOS:

先导入 CA 证书

将之前创建的 ca_cert.pem 用 ftp 导出 , 写邮件以附件的方式发到邮箱, 在 ios 浏览器登录邮箱, 下载附件, 安装 ca 证书.

1. 使用 IKEv2 + EAP 认证

找到手机上 “设置->VPN->添加配置”, 选 IKEv2

    描述: 随便填
    服务器: 填url或ip
    远程ID: ipsec.conf 中的 leftid
    用户鉴定: 用户名
    用户名: EAP 项用户名
    密码: EAP 项密码

2. 使用 IKEv2 + 客户端证书 认证

把之前的 .p12 证书(里面包含ca证书)发到邮箱在手机上打开.  导入到手机(此时需要之前设置的证书密码).

找到手机上 “设置->VPN->添加配置”, 选 IKEv2

    描述: 随便填
    服务器: 填url或ip
    远程ID: ipsec.conf 中的 leftid
    用户鉴定: 证书
    证书: 选择安装完的客户端证书

3. 使用 IKEv2 + 预设密钥 认证

找到手机上 “设置->VPN->添加配置”, 选 IKEv2

    描述: 随便填
    服务器: 填url或ip
    远程ID: ipsec.conf 中的 leftid
    用户鉴定: 无
    使用证书: 关
    密钥: PSK 项密钥

2) Windows 10

导入证书:

    将 CA 根证书 ca_cert.pem 重命名为 ca_cert.crt
    双击 ca_cert.crt 开始安装证书
    点击安装证书
    “存储位置” 选择 “本地计算机”, 下一步
    选择 “将所有的证书都放入下列存储区”, 点浏览, 选择 “受信任的根证书颁发机构”, 确定, 下一步, 完成.

建立连接:

    “控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的 Internet 连接”
    Internet 地址写服务器 IP 或 URL。
    描述随便写。
    用户名密码写之前配置的 EAP 的那个。
    确定
    转到 控制面板网络和 Internet网络连接
    在新建的 VPN 连接上右键属性然后切换到“安全”选项卡
    VPN 类型选 IKEv2
    数据加密选“需要加密”
    身份认证这里需要说一下,如果想要使用 EAP 认证的话就选择“Microsoft:安全密码(EAP-MSCHAP v2)”; 想要使用私人证书认证的话就选择“使用计算机证书”。
    再切换到 “网络” 选项卡, 双击 “Internet 协议版本 4” 以打开属性窗口, 这里说一下, 如果你使用的是老版本的 win10, 可能会打不开属性窗口, 这是已知的 bug, 升级最新版本即可解决.
    点击 “高级” 按钮, 勾选 “在远程网络上使用默认网关”, 确定退出.

VPN 配置完成

3) Windows 7 导入证书略有不同

开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
「文件」-「添加/删除管理单元」,添加「证书」单元
证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。
在左边的「控制台根节点」下选择「证书」-「受信任的根证书颁发机构」-「证书」,右键 -「所有任务」-「导入」打开证书导入窗口。
选择 CA 证书 ca_cert.crt 导入即可

注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。

其它配置参考

## 参考配置1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

config setup
uniqueids=never
charondebug="cfg 2, dmn 2, ike 2, net 0"

conn %default
left=%defaultroute
leftsubnet=0.0.0.0/0
leftcert=vpnHostCert.pem
right=%any
rightsourceip=10.0.0.0/24

conn xauth_pubkey_ikev1
keyexchange=ikev1
fragmentation=yes
rightauth=pubkey
rightauth2=xauth
leftsendcert=always
rekey=no
auto=add

conn xauth_psk_ikev1
keyexchange=ikev1
leftauth=psk
rightauth=psk
rightauth2=xauth
auto=add
dpdaction=hold
dpddelay=600s
dpdtimeout=5s
lifetime=24h
ikelifetime=240h
rekey=no

conn pubkey_ikev2
keyexchange=ikev2
leftauth=pubkey
rightauth=pubkey
leftsendcert=always
auto=add

conn eap_ikev2
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
leftauth=pubkey
leftsendcert=always
rightauth=eap-mschapv2
eap_identity=%any
auto=add
## 站点到站点tunnel配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

## https://help.aliyun.com/document_detail/65374.html?spm=a2c4g.11186623.6.569.H47Tmw

# vi /etc/strongswan/ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
uniqueids=never
conn %default
authby=psk
type=tunnel
conn tomyidc
keyexchange=ikev1
left=59.110.165.70
leftsubnet=172.16.2.0/24
leftid=59.110.165.70(IDC网关设备的公网IP)
right=119.23.227.125
rightsubnet=192.168.10.0/24
rightid=119.23.227.125(VPN网关的公网IP)
auto=route
ike=aes-sha1-modp1024
ikelifetime=86400s
esp=aes-sha1-modp1024
lifetime=86400s
type=tunnel




# vi /etc/strongswan/ipsec.secrets
59.110.165.70 119.23.227.125 : PSK yourpassword

# 打开系统转发配置。
# echo 1 > /proc/sys/net/ipv4/ip_forward

参考文档

搭建strongswan服务器
http://www.bewindoweb.com/123.html

https://expats-in-china.com/t/setup-a-vpn-ipsec-on-centos-7-using-strongswan/27